SVM only patch to fix location of PIO request RIP update.
authorkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Tue, 28 Mar 2006 12:40:30 +0000 (13:40 +0100)
committerkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Tue, 28 Mar 2006 12:40:30 +0000 (13:40 +0100)
Fixes booting of win2003 server, and various CD installation failures.

Signed-off-by: Tom Woller <thomas.woller@amd.com>
xen/arch/x86/hvm/svm/svm.c

index ea4138f856e55d78b02d8ee98b1c2694fdbc3eec..dcecfda39feee9830722fe384b8ec5f2a3b45501 100644 (file)
@@ -1263,11 +1263,6 @@ static void svm_io_instruction(struct vcpu *v, struct cpu_user_regs *regs)
 
         /* Need the original rip, here. */
         addr = svm_get_io_address(vmcb, regs, dir, real);
-        /* 
-         * On SVM, the RIP of the intruction following the IN/OUT is saved in
-         * ExitInfo2
-         */
-        vmcb->rip = vmcb->exitinfo2;
 
         /* "rep" prefix */
         if (info.fields.rep) 
@@ -1300,6 +1295,8 @@ static void svm_io_instruction(struct vcpu *v, struct cpu_user_regs *regs)
                 else
                     count = (addr & ~PAGE_MASK) / size;
             }
+            else    
+                vmcb->rip = vmcb->exitinfo2;
 
             send_pio_req(regs, port, count, size, addr, dir, 1);
         }